<?php
/**
 * 绮梦PHP框架 (Dream PHP Freamework)
 * 免费 简单 快速 高效 安全 专业
 * 绮梦PHP框架是一个基于组件的PHP框架，用于快速开发现代Web应用程序。
 *
 * @author lewis (lewisld@163.com)
 * @copyright Copyright (c) 2015, lewis (http://www.dreamfreamework.com/)
 * @license http://www.dreamfreamework.com/licenses/ Apache License
 * @link http://www.dreamfreamework.com/
 */

namespace System\Caching;

use System\Caching\AdapterInterface;

/**
 * 缓存接口类
 *
 * @package Dream
 * @subpackage CacheInterface
 * @namespace System\Caching
 * @author lewis (lewisld@yeah.net)
 */
interface CacheInterface
{

    /**
     * 获取缓存
     *
     * @param string $key 缓存键名
     * @return \System\Caching\AdapterInterface 返回驱动适配器对象
     */
    public function get($key);

    /**
     * 设置缓存
     *
     * @param string $key 缓存键名
     * @param mixed $value 缓存值
     * @param int $ttl 缓存有效期
     * @return \System\Caching\AdapterInterface 返回驱动适配器对象
     */
    public function set($key, $value, $expiry = null);

    /**
     * 删除缓存
     *
     * @param string $key 缓存键名
     * @return \System\Caching\AdapterInterface 返回驱动适配器对象
     */
    public function del($key);

    /**
     * 缓存是否存在
     *
     * @param string $key 缓存键名
     * @return bool 如果缓存已经存在就返回“true”，否则返回“false”
     */
    public function has($key);

    /**
     * 设置缓存驱动适配器配置
     *
     * @param  string $key 键名
     * @param  string $value 值
     * @return \System\Caching\AdapterInterface 返回驱动适配器对象
     */
    public function setOption($key, $value);

    /**
     * 清除所有缓存
     *
     * @return \System\Caching\AdapterInterface 返回驱动适配器对象
     */
    public function clear();

    /**
     * 清除所有过期的缓存
     *
     * @return \System\Caching\AdapterInterface 返回驱动适配器对象
    */
    public function drop();

    /**
     * 获取驱动适配器对象
     *
     * @throws \System\Caching\Exception\AdapterNotSetException 缓存驱动适配器为设置异常
     * @return \System\Caching\AdapterInterface 返回驱动适配器对象
     */
    public function getAdapter();

    /**
     * 设置驱动适配器对象
     *
     * @param \System\Caching\AdapterInterface $adapter 驱动适配器对象
     * @return \System\Caching\AdapterInterface 返回驱动适配器对象
     */
    public function setAdapter(AdapterInterface $adapter);


}